using System;
using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.ViewModel;
using Microsoft.Practices.Unity;
using Ausy.Silverlight.Survey.Infrastructure.Common;
using Ausy.Silverlight.Survey.Infrastructure.Events;
using Ausy.Silverlight.Survey.Infrastructure.Context;
using System.Windows.Input;
using Microsoft.Practices.Prism.Commands;

namespace Ausy.Silverlight.Survey.AccountModule.ViewParts
{
    /// <summary>
    /// Cette classe représente le Vue Model pour le ExistingAccount
    /// </summary>
    public class ExistingAccountViewModel : ViewModel<IExistingAccountView>, IExistingAccountViewModel
    {
        #region Constructor

        /// <summary>
        /// Constructeur par défaut
        /// </summary>
        /// <param name="container">Container Unity pour instanciation des type d'objet</param>
        public ExistingAccountViewModel(IUnityContainer container)
            : base(container)
        {

        }

        #endregion
        
        #region MessageText Property
        /// <summary>
        /// Property messageText
        /// </summary>
        private string messageText;

        /// <summary>
        /// Property MessageText
        /// </summary>
        public string MessageText
        {
            get { return messageText; }
            set
            {
                if (messageText != value)
                {
                    messageText = value;
                    RaisePropertyChanged(() => this.MessageText);
                }
            }
        }

        #endregion


        #region CloseCommand Command Property

        /// <summary>
        /// Commande de gestion de la fermeture 
        /// </summary>
        public ICommand CloseCommand { get; private set; }

        #endregion

        #region Initialize Method

        /// <summary>
        /// Cette méthode permet l'initialisation du ViewModel avant que le DataContext soit affecté à la vue
        /// </summary>
        protected override void Initialize()
        {
            // Initialisation des données
            this.MessageText = "Vous avez déjà joué !";

            // Initialisation des commandes
            this.CloseCommand = new DelegateCommand<string>(this.OnClose);
        }

        #endregion
        
        /// <summary>
        /// Cette méthode permet de fermer l'application
        /// </summary>
        /// <param name="args"></param>
        public void OnClose(string args)
        {
            var context = this.container.Resolve<IApplicationContext>();
            context.QuestionnaireResult = 0;
            context.AccountIdentifier = Guid.Empty;
            context.AccountEmail = String.Empty;
            this.eventAggregator.GetEvent<NavigateEvent>().Publish(new NavigateEvent(NavigateUri.CreateAccountUri));
        }
    }
}
